Код:
/*:
*-----------------------------------------------------------------------------
* DKR JsonWorker
*-----------------------------------------------------------------------------
* For: RPGMAKER MV, MZ
* DKR_JsonWorker_MV_MZ.js
*-----------------------------------------------------------------------------
* 28.06.2021 - Версия 1.0.0
*-----------------------------------------------------------------------------
* Поставляется AS-IS.
* Вся ответственность при использовании - на Пользователе!
*-----------------------------------------------------------------------------
*-----------------------------------------------------------------------------
* @author DarchanKaen
* @target MV, MZ
* @plugindesc (v.1.0.0) Плагин позволяет работать с произвольными JSON-файлами (загружать / менять / создавать).
* @help
* DKR JsonWorker MV_MZ 1.0
* ----------------------------------------------------------------------------
* ----Общая информация:
* Плагин позволяет работать с произвольными JSON-файлами, а именно:
* загружать (полностью / частично) данные фйла в переменные мейкера,
* менять (полностью / частично) данные в файле и создавать новые JSON-файлы.
* Также для упрощения можно использовать Основной файл.
* После операций загрузки ("маппинга") / изменения ставьте Ждать на ~15 кадров!!!
* ! Детали в демо и на сайте https://rpgmaker.su/ в разделе Плагинов !
* ----Использование:
* ---Параметры плагина
* В параметрах можно указать: каталог, где находятся JSON-файлы,
* номер переменной для хранения имени Основного файла и название Основного файла.
* ---Команды (для раздела "Скрипт"):
* --Управляющие команды:
* DKR.JsonWorker.setJSONDir('имя каталога\') - изменить каталог с JSON-файлы;
* DKR.JsonWorker.setMainFile('имяФайла.json') - изменить Основной файл;
* DKR.JsonWorker.clearMainFile() - очистить значение Основного файла чтоб его не использовать (физически файл не меняется!);
* DKR.JsonWorker.setMainFileDefaultVariableId(номерПеременной) - изменить номер переменно для хранения имени Основного файла;
* DKR.JsonWorker.isJSONFileExist('имяФайла.json') - узнать, существует ли (возвращает true) или нет (возвращает false) указаный JSON-файл;
* --Рабочие команды:
* - Чтение произвольного JSON-файла(просто выводит в консоль содержимое файла, для теста):
* DKR.JsonWorker.readJson('имяФайла.json');
* - Загрузка ("маппинг") данных произвольного JSON-файла на переменные мейкера:
* DKR.JsonWorker.simpleMapJSON('имяФайла.json', номерПеременной);
* DKR.JsonWorker.concreteMapJSON('имяФайла.json',['ключЗаписи1', ..., 'ключЗаписиN'], [номерПеременной1, ..., номерПеременнойN]);
* DKR.JsonWorker.fullMapJSON ('имяФайла.json', [номерПеременной1, ..., номерПеременнойN]);
* - Создание произвольного JSON-файла:
* DKR.JsonWorker.simpleWriteJSON('имяФайла.json', данныеДляЗаписи, ключЗаписи(можно не указывать));
* DKR.JsonWorker.fullWriteJSON('имяФайла.json', [данныеДляЗаписи1, ...,данныеДляЗаписиN], [ключЗаписи1, ...,ключЗаписиN]);
* - Изменение данных произвольного JSON-файла:
* DKR.JsonWorker.simpleModifyJSON('имяФайла.json', ключЗаписи, данныеДляЗаписи);
* DKR.JsonWorker.fullModifyJSON ('имяФайла.json', [ключЗаписи1, ...,ключЗаписиN], [данныеДляЗаписи1, ...,данныеДляЗаписиN]);
* - Команды для Основного файла (по аналогии с вышеуказанным):
* DKR.JsonWorker.readMainFile();
* DKR.JsonWorker.simpleMapMainFile(номерПеременной);
* DKR.JsonWorker.concreteMapMainFile(['ключЗаписи1', ..., 'ключЗаписиN'], [номерПеременной1, ..., номерПеременнойN]);
* DKR.JsonWorker.fullMapMainFile([номерПеременной1, ..., номерПеременнойN]);
* DKR.JsonWorker.simpleModifyMainFile(ключЗаписи, данныеДляЗаписи);
* DKR.JsonWorker.fullModifyMainFile([ключЗаписи1, ...,ключЗаписиN], [данныеДляЗаписи1, ...,данныеДляЗаписиN]);
* ----------------------------------------------------------------------------
* ----Версия 1.0.0
* --Релиз плагина!
* ----------------------------------------------------------------------------
* @param jsonDir
* @type text
* @desc Каталог, где находятся JSON-файлы.
* @default metaJSON/
*
* @param mainFileNameDefVar
* @type number
* @desc Номер переменной, в которой сохраняется название Основгого файла.
* @default 1
*
* @param mainFile
* @type text
* @desc Название Основного JSON-файла (он не обязателен).
* @default mainFile.json
*/
var Imported = Imported || {};
Imported.DKR_JsonWorker = true;
var DKR = DKR || {};
DKR.JsonWorker = DKR.JsonWorker || {};
DKR.JsonWorker.version = 1.0;
DKR.JsonWorker.parameters = PluginManager.parameters('DKR_JsonWorker_MV_MZ');
( () => {
//---INNER VARIABLES
const fileSystem = require('fs');
const noneFile = 'NONE';
const customDataKey = 'customData';
let jsonDir = DKR.JsonWorker.parameters['jsonDir'] || 'metaJSON/';
let mainFileNameDefVar = Number(DKR.JsonWorker.parameters[' mainFileNameDefVar']) || 1;
let mainFile = DKR.JsonWorker.parameters['mainFile'] || noneFile;
//---INNER FUNCTIONS
//-open file
let openJson = function(jsonFileName, callbackTask){
let url = jsonDir + jsonFileName;
if( false === fileSystem.existsSync(url) ){
console.log(`DKR.JsonWorker: file ${url} not exist!`);
return false;
}
try{
let xhr = new XMLHttpRequest();
let jsonData = -1;
xhr.open('GET', url);
xhr.overrideMimeType('application/json');
xhr.onload = function() {
if (xhr.status < 400) {
jsonData = JSON.parse(xhr.responseText);
callbackTask(jsonData);
return jsonData;
}
}
xhr.send();
}catch(error){
console.log(`DKR.JsonWorker: unknown error on file ${url} opening!!!`);
console.log(error);
return false;
}
}
//-create file
let createJson = function(jsonFileName, data){
let url = jsonDir + jsonFileName;
let jsonData = JSON.stringify(data);
try{
fileSystem.writeFileSync(url, jsonData);
}catch(error){
console.log(`DKR.JsonWorker: unknown error on file ${url} writing!!!`);
console.log(error);
return false;
}
}
//-update Main file name
let updateMainFileFromVariable = function(){
if(noneFile === mainFile){
mainFile = $gameVariables.value(mainFileNameDefVar);
if(0 === mainFile){
mainFile = noneFile;
}
}
}
//---PUBLIC WORK FUNCTIONS
//--READ!
//-read...for test
DKR.JsonWorker.readJson = function(jsonFileName){
const readTask = (data) => {
console.log(data);
};
let jsonData = openJson(jsonFileName, readTask);
}
//-map in one variable
DKR.JsonWorker.simpleMapJSON = function(jsonFileName, variableId){
const simpeMapTask = (jsonData) => {
$gameVariables.setValue(variableId, jsonData);
};
let jsonData = openJson(jsonFileName, simpeMapTask);
}
//-map in concrete variables one concrete values
DKR.JsonWorker.concreteMapJSON = function(jsonFileName, jsonKeysArr, variablesIdArr){
if(jsonKeysArr.length !== variablesIdArr.length){
console.log('DKR.JsonWorker.concreteMapJSON(): keys and variables quantity must be equal!');
return false;
}
const concreteMapTask = (jsonData) => {
for(let n = 0; n < jsonKeysArr.length; n++){
$gameVariables.setValue(variablesIdArr[n], jsonData[ jsonKeysArr[n] ]);
}
};
let jsonData = openJson(jsonFileName, concreteMapTask);
}
//-map to many variables all values
DKR.JsonWorker.fullMapJSON = function(jsonFileName, variablesIdArr){
const fullMapTask = (jsonData) => {
let jsonDataValues = Object.values(jsonData);
for(let n = 0; n < variablesIdArr.length; n++){
$gameVariables.setValue(variablesIdArr[n], jsonDataValues[n]);
}
};
let jsonData = openJson(jsonFileName, fullMapTask);
}
//--WRITE!
//-write simple data
DKR.JsonWorker.simpleWriteJSON = function(jsonFileName, dataValue, dataKey = customDataKey){
const customDataObject = {};
customDataObject[dataKey] = dataValue;
createJson(jsonFileName, customDataObject);
}
//-write full data
DKR.JsonWorker.fullWriteJSON = function(jsonFileName, dataValuesArr, dataKeysArr){
const customDataObject = {};
if(dataKeysArr.length !== dataValuesArr.length){
console.log('DKR.JsonWorker.fullWriteJSON(): keys and values quantity must be equal!');
return false;
}
for(let n = 0; n < dataKeysArr.length; n++){
customDataObject[ dataKeysArr[n] ] = dataValuesArr[n];
}
createJson(jsonFileName, customDataObject);
}
//--MODIFY!
//-simple modify
DKR.JsonWorker.simpleModifyJSON = function(jsonFileName, jsonKey, jsonValue){
const simpleModifyTask = (data) => {
data[jsonKey] = jsonValue;
createJson(jsonFileName, data);
};
let jsonData = openJson(jsonFileName, simpleModifyTask);
}
//-full modify
DKR.JsonWorker.fullModifyJSON = function(jsonFileName, jsonKeysArr, jsonValuesArr){
if(jsonKeysArr.length !== jsonValuesArr.length){
console.log('DKR.JsonWorker.fullModifyJSON(): keys and values quantity must be equal!');
return false;
}
const fullModifyTask = (data) => {
for(let n = 0; n < jsonKeysArr.length; n++){
data[ jsonKeysArr[n] ] = jsonValuesArr[n];
}
createJson(jsonFileName, data);
};
let jsonData = openJson(jsonFileName, fullModifyTask);
}
//--MAIN FILE!
DKR.JsonWorker.readMainFile = function(){
DKR.JsonWorker.readJson(mainFile);
}
DKR.JsonWorker.simpleMapMainFile = function(variableId){
updateMainFileFromVariable();
if(noneFile === mainFile){
console.log('DKR.JsonWorker: main file not set!');
return false;
}
DKR.JsonWorker.simpleMapJSON(mainFile, variableId);
}
DKR.JsonWorker.concreteMapMainFile = function(jsonKeysArr, variablesIdArr){
updateMainFileFromVariable();
if(noneFile === mainFile){
console.log('DKR.JsonWorker: main file not set!');
return false;
}
DKR.JsonWorker.concreteMapJSON(mainFile, jsonKeysArr, variablesIdArr)
}
DKR.JsonWorker.fullMapMainFile = function(variablesIdArr){
updateMainFileFromVariable();
if(noneFile === mainFile){
console.log('DKR.JsonWorker: main file not set!');
return false;
}
DKR.JsonWorker.fullMapJSON(mainFile, variablesIdArr);
}
DKR.JsonWorker.simpleModifyMainFile = function(jsonKey, jsonValue){
updateMainFileFromVariable();
if(noneFile === mainFile){
console.log('DKR.JsonWorker: main file not set!');
return false;
}
DKR.JsonWorker.simpleModifyJSON(mainFile, jsonKey, jsonValue);
}
DKR.JsonWorker.fullModifyMainFile = function(jsonKeysArr, jsonValuesArr){
updateMainFileFromVariable();
if(noneFile === mainFile){
console.log('DKR.JsonWorker: main file not set!');
return false;
}
DKR.JsonWorker.fullModifyJSON(mainFile, jsonKeysArr, jsonValuesArr)
}
//---PUBLIC CONTROL FUNCTIONS
//-set base dir
DKR.JsonWorker.setJSONDir = function(dir){
jsonDir = dir;
}
//-set main file
DKR.JsonWorker.setMainFile = function(fileName){
mainFile = fileName;
$gameVariables.setValue( mainFileNameDefVar, mainFile);
}
//-clear main file
DKR.JsonWorker.clearMainFile = function(){
mainFile = noneFile;
$gameVariables.setValue( mainFileNameDefVar, 0);
}
//-set main fail default variable id for standard save/load
DKR.JsonWorker.setMainFileDefaultVariableId = function(variableId){
if(variableId < 1){
console.log('DKR.JsonWorker: variable id must be greater than zero!');
}
mainFileNameDefVar = variableId;
}
//-ident is file exist
DKR.JsonWorker.isJSONFileExist = function(jsonFileName){
let url = jsonDir + jsonFileName;
let isFileExist = fileSystem.existsSync(url);
return isFileExist;
}
})();
Социальные закладки